/******************************************************************************
 *      Mestrado em Ciência da Computação - UFMS
 *		Redes de Computadores - Prof. Dr. Ronaldo Alves Ferreira
 *		Alunos: Geraldo Landre, Marcel Tolentino, Vinícius Bueno
 *****************************************************************************/

#include "dirmanip.h"
#include "vstring.h"

/*
	IMPLEMENTAÇÃO DAS FUNÇÕES DE dirmanip.h
*/

/*-----------------Funções para Transferencia de Arquivos----------------------*/

int get_line(vstring **line,vstring **msg)
{
    if(*msg != NULL)
    {
        get_token(msg,line,END_LINE);
        return 1;
    }
    return 0;
}

void remove_comment(vstring **line)
{
    int index = -1;
    if((index = get_index_occour(*line,COMMENT)) >= 0)
        remove_substring(line,index,(*line)->length - index);
}

int get_file_size(vstring *path)
{
    unsigned int file_size;
    FILE *f;

    if((f = fopen(path->pt,"rb+")) != NULL)
    {
        fseek(f,0,SEEK_END);  // descobrir o tamanho total do arquivo
        file_size = ftell(f);
        rewind(f);
        fclose(f);
        return file_size;
    }
    return 0;
}

int read_file(vstring *path,vstring **data)
{
    unsigned int file_size;
    FILE *f;

    if((f = fopen(path->pt,"rb+")) != NULL)
    {
        fseek(f,0,SEEK_END);  // não usei a função de descobrir o tamanho porque
        file_size = ftell(f); // seriam 2 aberturas do mesmo arquivo
        rewind(f);
        if(alloc_string(data,file_size))
        {
            if(fread((*data)->pt,1,file_size,f) == file_size)
            {
                (*data)->length = file_size;
                fclose(f);
                return 1;
            }
        }
    }
    return 0;
}

void write_file(vstring *path,vstring *data)
{
    FILE *f;

    if((f = fopen(path->pt,"wb+")) != NULL)
    {
        fwrite(data->pt,1,data->length,f);
        fclose(f);
    }
}